#include <iostream>
#include <cassert>
#include <pthread.h>
#include <unistd.h>
#include <cstdio>
#include <mutex>

using namespace std;

mutex mtx;

int g_val = 0;

std::string fun()
{
    return "我是一个独立的方法!";
}

void* thread_contine(void* args)
{
    const char* name = (const char* )args;
    while(true)
    {
        
        {
            lock_guard<mutex> lock(mtx);
            cout<<"我是新线程，我正在运行! name: "<< args << " : " << g_val++ << " : "<< &g_val <<  " : " << fun() << endl;
        }
        fun();
        sleep(1);
    }
    return nullptr;
}

int main()
{
    pthread_t tid;
    int n = pthread_create(&tid,nullptr,thread_contine,(void*)"thread one");
    assert(0 == n); // 防止写成赋值 n=0
    (void)n;

    // 主线程
     while(true)
    {
        
        {
            // 地址 
            lock_guard<mutex> lock(mtx);
            char tidbuffer[64];
            snprintf(tidbuffer,sizeof(tidbuffer),"0x%x", tid);
           // cout<<"我是主线程，我正在运行!  tid :" << tid <<endl; // 输出的数字看不懂，所以需要转换一下
           cout<<"我是主线程，我正在运行!  tid :" << tidbuffer << " : "<< g_val << " : "<< &g_val <<  " : "<< fun() <<endl;
        }
        fun();
        sleep(1);
    }

    return 0;
}